#include "drv_key.h"
#include "drv_systick.h"

void drv_key_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;

	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_3 | GPIO_Pin_13 | GPIO_Pin_9 | GPIO_Pin_8 | GPIO_Pin_5;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_Init(GPIOC, &GPIO_InitStruct);
}

uint8_t drv_get_user(void)
{
	uint8_t ret=0;
	if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_4) == RESET)
	{
		drv_systick_ms(20);
		if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_4) == RESET)
		{
			while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_4) == RESET);
			ret=1;
		}
	}
	if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_3) == RESET)
	{
		drv_systick_ms(20);
		if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_3) == RESET)
		{
			while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_3) == RESET);
			ret=2;
		}
	}
	if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == RESET)
	{
		drv_systick_ms(20);
		if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == RESET)
		{
			while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == RESET);
			ret=3;
		}
	}
	return ret;
}

uint8_t drv_get_key1(void)
{
	uint8_t ret=0;
	if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_9) == RESET)
	{
		drv_systick_ms(20);
		if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_9) == RESET)
		{
			while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_9) == RESET);
			ret=1;
		}
	}
	return ret;
}

uint8_t drv_get_key2(void)
{
	uint8_t ret=0;
	if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8) == RESET)
	{
		drv_systick_ms(20);
		if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8) == RESET)
		{
			while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8) == RESET);
			ret=1;
		}
	}
	return ret;
}

uint8_t drv_get_key3(void)
{
	uint8_t ret=0;
	if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5) == RESET)
	{
		drv_systick_ms(20);
		if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5) == RESET)
		{
			while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5) == RESET);
			ret=1;
		}
	}
	return ret;
}

